FreeBSD ZFS + HBA 狂噴 SYNCHRONIZE CACHE 錯誤訊息
好不容易 FreeBSD 9.0 上 ZFS 的 filesystem 版本升級到 5, storage pool 的版本升級到 28, 總算有個較完整的功能可用, 興沖沖的就給他上去.
剛上去時, 系統一直狂噴
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): CAM status: SCSI Status Error
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): SCSI status: Check Condition
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): SCSI sense: ILLEGAL REQUEST asc:20,0 (Invalid command operation code)
Feb 23 12:21:59 mx kernel: (da2:isp0:0:0:0): Command byte 0 bit 0 is invalid
整個效能變笑能.....
本以為是 driver 和 HBA 卡不相容或 FreeBSD 版本問題, 不信邪先把硬碟格式化成 UFS 反倒不會噴這個訊息出來, 這下確認了是 ZFS 在搞鬼.
因為 ZFS 在完成同步寫入時, 會強制在 HBA 上執行 NVRAM 的清除作業, 這會影響效能!!
為避免此問題必須要在 /boot/loader.conf 內加入
vfs.zfs.cache_flush_disable=1
以阻止 ZFS 對 HBA 上的 NVRAM 執行 SYNCHRONIZE CACHE 指令.